import { fileURLToPath, URL } from 'node:url';

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueDevTools from 'vite-plugin-vue-devtools';
//!导入使用jsx
import vueJsx from '@vitejs/plugin-vue-jsx';
//!导入自动路由
import VueRouter from 'unplugin-vue-router/vite';

//!element-plus  按需导入配置
// import AutoImport from 'unplugin-auto-import/vite';
// import Components from 'unplugin-vue-components/vite';
// import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';

export default defineConfig({
  plugins: [
    //!切记一定要放在plugins最顶部，也就是vue()前面
    VueRouter({
      //todo指定该目录下的所有文件，自动添加路由
      routesFolder: [
        'src/views/day20241211',
        'src/views/day20241212',
        'src/views/day20241213',
        'src/views/day20241214',
        'src/views/day20241216',
        'src/views/day20241217',
        'src/views/day20241218',
        'src/views/day20241219',
        'src/views/day20241220',
        'src/views/day20241223',
        'src/views/day20241224',
        'src/views/day20241225',
        'src/views/day20241226',
        'src/views/day20241227',
        'src/views/day20241227',
        'src/views/day20241230',
        'src/views/day20250102',
        'src/views/day20250103',
        'src/views/day20250104',
        'src/views/day20250106',
        'src/views/day20250107',
        'src/views/day20250108',
        'src/views/day20250109',
        'src/views/day20250110',
        'src/views/day20250116',
      ],
      //todo指定该目录下的什么文件要添加路由
      extensions: ['.vue', '.jsx'],
    }),
    vue(),
    //!使用jsx
    vueJsx(),
    vueDevTools(),
    //!element-plus  按需导入使用
    // AutoImport({
    //   resolvers: [ElementPlusResolver()],
    // }),
    // Components({
    //   resolvers: [ElementPlusResolver()],
    // }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
  /*-----------------------------------------配置打包服务开始---------------------------------------------- */
  build: {
    target: 'es2017',
    minify: 'terser', // 是否进行压缩,boolean | 'terser' | 'esbuild',默认使用terser
    manifest: false, // 是否产出manifest.json
    sourcemap: false, // 是否产出sourcemap.json
    outDir: 'dist', // 产出目录
  },
  /*-----------------------------------------配置打包服务结束---------------------------------------------- */
  /*-----------------------------------------配置启动服务开始，热更新---------------------------------------------- */
  server: {
    //这是 Vite 配置对象中的一部分，主要用来配置开发服务器的行为，比如端口、是否自动打开浏览器、是否启用热更新等。
    open: true, //表示在启动开发服务器时，自动打开浏览器。如果你设置为 false，则不会自动打开。
    port: Number(process.env.VITE_CLI_PORT), //指定开发服务器的端口 从环境变量中读取端口号，然后通过Number转换为数字
    proxy: {
      [process.env.VITE_BASE_API as string]: {
        //这里使用了环境变量 VITE_BASE_API 作为代理的路径前缀，as string 是为了确保 TypeScript 可以识别这个值是字符串类型。比如，VITE_BASE_API 可以设置为 /api，这意味着所有请求以 /api 开头的路径都将被代理
        target: `${process.env.VITE_BASE_PATH}`, //target 是目标服务器的地址，所有符合条件的请求都会被代理到该地址。VITE_BASE_PATH 是从环境变量中获取的，它指定了后端服务的路径地址。例如，VITE_BASE_PATH 可能是 http://localhost:8080，所以所有 /api 开头的请求都会被转发到 http://localhost:8080。
        changeOrigin: true, //这个配置会修改请求头中的 Origin 字段，使其与目标服务器一致。通常用来处理跨域问题。比如，如果你请求的目标是 http://localhost:8080，默认情况下，浏览器会把请求的 Origin 设置为当前的 URL，但使用 changeOrigin: true 后，Origin 会被改为目标服务器的地址，避免跨域问题
        rewrite: (path) => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''), //这是一个路径重写的规则，用来改变请求路径。例如，如果请求的是 /api/user，而 VITE_BASE_API 配置为 /api，那么通过代理，路径会被重写为 /user。这意味着 /api/user 的请求会被代理到目标服务器的 /user 路径。
      },
      '/sse': {
        //'/sse'：这是直接匹配路径 /sse，表示所有以 /sse 开头的请求会被代理到目标地址。
        target: `${process.env.VITE_BASE_PATH}`, //目标服务器的地址与第一个代理配置相同，这里的请求会被转发到 process.env.VITE_BASE_PATH 指定的路径
        changeOrigin: true, //同样，这会改变请求头中的 Origin 字段，以避免跨域问题。
        rewrite: (path) => path.replace(new RegExp('^/sse'), ''), //这个配置会将请求路径中的 /sse 前缀去掉。例如，访问 /sse/events 会被重写为 /events，然后转发到目标地址
      },
    },
    // proxy: {
    //   '/api': {
    //     target: 'http://192.168.20.213:8989',
    //     changeOrigin: true,
    //     rewrite: (path) => path.replace(/^\/api/, ''), // 视情况需要重写路径
    //   },
    // },
  },
  /*-----------------------------------------配置启动服务结束，热更新---------------------------------------------- */
});
